package programa;
import java.io.*;
import estados.EstadoJogoDaVelha;
import estrutura.MiniMax;
import exceptions.EstadoJogoDaVelhaException;


public class Programa {
    
    public static void main(String[] a) throws Exception {
        BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
        MiniMax mm = new MiniMax(); 

        EstadoJogoDaVelha estadoAtual =  new EstadoJogoDaVelha();
        estadoAtual.setJogador(EstadoJogoDaVelha.computador);
        
        while (! estadoAtual.isTerminal() ) {
            
            System.out.println("Estado atual do jogo " + estadoAtual);
            //Vez do jogador
            if (estadoAtual.getJogador() == EstadoJogoDaVelha.computador) {
                
                boolean ok = false;
                while (!ok) {
                    // vez da pessoa
                    try {
						System.out.println("\nESCOLHA SUA JOGADA?");
						System.out.print("LINHAS 1, 2 ou 3:");
						Integer linha  =  Integer.parseInt(teclado.readLine()) -1;
						
						System.out.print("COLUNAS 1, 2 ou 3:");
						Integer coluna  =  Integer.parseInt(teclado.readLine())-1;
						    
						estadoAtual = new EstadoJogoDaVelha( estadoAtual, EstadoJogoDaVelha.pessoa);
						estadoAtual.jogar(linha, coluna, EstadoJogoDaVelha.pessoa);

						ok = true;

                    }
                    catch (EstadoJogoDaVelhaException e) {
						// TODO: handle exception
                    	System.out.println(e.getMessage());
					}
                    catch (Exception e) {
                        System.out.println("DIGITE APENAS NÚMEROS ENTRE 1 E 3");
                    }
                }
            } 
            // Vez do computador
            else {
                
                mm.max(estadoAtual);
                System.out.println("Visitados "+ mm.getVisitados().toString() + " nós");
                estadoAtual = (EstadoJogoDaVelha)estadoAtual.getProxJogada();
               

            }

        }
        
        System.out.println("\n\n*** Fim do jogo!" + estadoAtual);
        if (estadoAtual.getUtilidade() > 0) System.out.println("\n\n*** O computador venceu! Aprenda a pensar!");
        else if (estadoAtual.getUtilidade() < 0) System.out.println("\n\n*** Você venceu! Parabéns isso foi impossível!");
        else System.out.println("\n\n*** Empate! Parabéns você não é burro!");
    }
}
